package com.cwh.taskcenter.domain.task.model;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 任务状态枚举
 * 定义任务的生命周期状态和状态转换规则
 * @author cwh
 */
@Getter
@AllArgsConstructor
public enum TaskStatus {
    PENDING_PUBLISH("待发布"),

    // 已发布状态：任务已发布，可被用户查看和执行
    PUBLISHED("已发布"),

    // 禁用状态：任务已被禁用，用户无法查看和执行
    DISABLED("禁用");


    private final String description;

    /**
     * 检查是否可以转换到目标状态
     * 定义状态机的转换规则
     */
    public boolean canTransitTo(TaskStatus newStatus) {
        switch (this) {
            case PENDING_PUBLISH:
                return newStatus == PUBLISHED  || newStatus == DISABLED;
            case PUBLISHED:
                return newStatus == DISABLED;
            case DISABLED:
                return newStatus == PUBLISHED;
            default:
                return false;
        }
    }


    public static TaskStatus fromString(String name) {
        for (TaskStatus value : values()) {
            if (value.name().equals(name)) {
                return value;
            }
        }
        return null;
    }


    /**
     * 检查状态是否可执行
     */
    public boolean isExecutable() {
        return this == PUBLISHED;
    }

}
